# coding=utf-8
from __future__ import unicode_literals
import pandas as pd
from datetime import datetime


def get_holidays():
    """ 获取[20170901-20171231]时间段的休市日期
    10月1日（星期日）至10月8日（星期日）休市， 10月9日（星期一）起照常开市。另外，9月30日（ 星期六）为周末休市。
    :return: list
    """
    return ['2017-09-30', '2017-10-01', '2017-10-02', '2017-10-03',
            '2017-10-04', '2017-10-05', '2017-10-06', '2017-10-07', '2017-10-08']


def get_trade_calendar(start_date='20170901', end_date='20171231', filter_dates=None):
    """ 获取指定时间段的交易日历
    :param start_date: 开始时间，默认为：'20170901'
    :param end_date:   结束时间，默认为：'20171231'
    :param filter_dates: 过滤节假日日期
    :return: 交易日期字符串日期列表,  譬如：['2017-09-01', '2017-09-04',..., 2017-12-29]
    """
    if filter_dates is None:
        filter_dates = get_holidays()
    trade_calendar = list()
    date_l = [datetime.strftime(x, '%Y-%m-%d') for x in list(pd.date_range(start=start_date, end=end_date))]
    for date in date_l:
        tmp = datetime.strptime(date, '%Y-%m-%d')
        # 过滤周末和节假日
        if tmp.isoweekday() in [6, 7] or date in filter_dates:
            continue
        trade_calendar.append(date)
    return trade_calendar


if __name__ == '__main__':
    print get_trade_calendar('20170901', '20170930', get_holidays())


